
import 'package:flutter/material.dart';

/// 基础页面，这里采用mixin实现扩展了一些功能
///
/// {@template BasePage}
/// 在你的widget类上 通过with关键字混入此实现
/// class XxxPage extends Widget with BasePage
/// {@endtemplate}
mixin BasePage on Widget {

  /// 通用的开启界面方法，调用此方法可以打开这个页面
  ///
  /// - [context] 当前页面组件上下文
  /// - [routeName] 路由名称
  /// - [arguments] 页面参数
  /// - [Future] 打开页面是一个异步任务，返回Future对象可以通过它的then方法接收此页面返回的
  /// 结果，该结果来自于Navigator maybePop或者pop退出页面时设置的返回值
  ///
  Future push(
      BuildContext context, {
        String? routeName,
        Object? arguments,
      }) {
    RouteSettings? routeSettings;
    if (routeName != null || arguments != null) {
      routeSettings = RouteSettings(name: routeName, arguments: arguments);
    }
    return Navigator.push(
      context,
      MaterialPageRoute(
        settings: routeSettings,
        builder: (c) => this,
      ),
    );
  }
}